package de.hdu.pms.ho;

import java.sql.DriverManager;
import java.sql.SQLException;

import org.apache.catalina.core.ApplicationContext;
import org.apache.log4j.Logger;
import java.sql.Connection;
import java.sql.Statement;

/**
 * The class {@link Startup} is used for creating a new database 
   while first starting the program.
 * 
 * @author Hendrik Neumann
 *
 */
public class Startup {
	private static Logger Log = Logger.getLogger(Startup.class);
	private String driverClass;
	private String user;
	private String password;
	private String defaultDBurl;
	private String newDB;
	//Don`t call us, we'll call you
	//Von der xml-Datei werden die Daten gefüllt, dank Spring
	
	
	public Startup(){
		Log.error("Startup wird initialisiert");
	}
	
	/**
	 * The method initializes the database while first starting of the program.
	 * The properties are defined in {@link ApplicationContext} xml file.
	 * 
	 */
	public void initDB(){
		Log.debug("DB wird initialisiert! Neue Datenbank = " + newDB);

			try {
				Class.forName(driverClass).newInstance();
				Connection con = DriverManager.getConnection(defaultDBurl, user, password);
				Statement stmt = con.createStatement();
				String sqlString = "CREATE DATABASE " + newDB;
				Log.debug(sqlString);
				stmt.execute(sqlString);
				con.commit();
				con.close();
				Log.info("Das Anlegen hat nicht funktioniert");
				
				
			} catch (InstantiationException e) {
				Log.error("Die Treiberklasse kann nicht geöffnet werden:" + e.getMessage());
			} catch (IllegalAccessException e) {
				Log.error("Die Treiberklasse kann nicht geöffnet werden:" + e.getMessage());
			} catch (ClassNotFoundException e) {
				Log.error("Die Treiberklasse kann nicht geöffnet werden:" + e.getMessage());
			} catch (SQLException e) {
				Log.error("Die Treiberklasse kann nicht geöffnet werden:" + e.getMessage() +	
						"Oder das Anlegen hat nicht funktioniert");
			}

	}
	
	/*
	 * Getter and Setter Methods
	 */
	public void setDriverClass(String driverClass) {
		this.driverClass = driverClass;
	}

	public void setUser(String user) {
		this.user = user;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public void setDefaultDBurl(String defaultDBurl) {
		this.defaultDBurl = defaultDBurl;
	}

	public void setNewDB(String newDB) {
		this.newDB = newDB;
	}

}
